home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio / Ham Radio CD-ROM (Emerald Software) (1995).ISO / cw / morse2 / sendmors.src < prev   
Text File  |  1989-11-03  |  4KB  |  125 lines

  1. {->>>>SendMorse<<<<---------------------------------------------}
  2. {                                                               }
  3. { Filename : SENDMORS.SRC -- Last Modified 7/2/88               }
  4. {                                                               }
  5. { This procedure converts plain text to audible Morse Code at   }
  6. { a specified code speed and tone frequency.  The times are     }
  7. { fairly accurate and have been tested on a 4.77 Mhz PC and a   }
  8. { 16 Mhz 80386 machine without significant difference in        }
  9. { code speed.  (Turbo's V3.0 DELAY procedure is finally clock   }
  10. { speed independent.)  The useful range of the procedure is     }
  11. { from 10 - 35 WPM, with its best "feel" at 15-25 WPM.          }
  12. {                                                               }
  13. { Text is passed to SendMorse as quoted strings of plain        }
  14. { text.  If two characters are to be sent as one without an     }
  15. { intermediate delay, an asterisk ('*') must procede the two    }
  16. { characters.  This replaces the overbar used in most amateur   }
  17. { literature.                                                   }
  18. {                                                               }
  19. {                                                               }
  20. {                                                               }
  21. {---------------------------------------------------------------}
  22.  
  23. PROCEDURE SendMorse(PlainText : String;
  24.                     ToneFrequency : Integer;
  25.                     CodeSpeed     : Integer);
  26.  
  27. VAR
  28.   I             : Integer;
  29.   ToneLength    : Integer;
  30.   DitLength     : Integer;
  31.   CodeChar      : String;
  32.   BlendNextTwo  : Boolean;
  33.  
  34. { Code is passed to local procedure Morse as literal dots and }
  35. { dashes:  '-.-.' = 'C', and so on.  SendMorse converts from  }
  36. { text to the dot/dash code representation. }
  37.  
  38. PROCEDURE Morse(CodeChar : String);
  39.  
  40. VAR
  41.   I : Integer;
  42.  
  43. BEGIN
  44.   FOR I := 1 TO Length(CodeChar) DO
  45.     BEGIN
  46.       IF CodeChar[1] IN ['.','-'] THEN
  47.         BEGIN
  48.           IF CodeChar[I] = '.' THEN ToneLength := DitLength
  49.             ELSE Tonelength := DitLength * 3;
  50.           Sound(ToneFrequency);
  51.           Delay(ToneLength);
  52.           NoSound;
  53.           Delay(DitLength)
  54.         END
  55.     END
  56. END;
  57.  
  58. BEGIN
  59.   BlendNextTwo := False;
  60.   { Code speed calculation is derived from formulae published in }
  61.   { the 1986 ARRL Handbook, Section 9-8.  I recommend running    }
  62.   { this procedure at 10 WPM  or greater; 15-20 WPM is its most  }
  63.   { effective range.  Timer resolution interferes above 35 WPM.  }
  64.   DitLength := Round((1.2 / CodeSpeed) * 1000.0);
  65.   FOR I := 1 TO Length(PlainText) DO IF PlainText[I] = '*' THEN
  66.     BlendNextTwo := TRUE ELSE
  67.     BEGIN
  68.       PlainText[I] := UpCase(PlainText[I]);
  69.       CASE PlainText[I] OF
  70.         'A' : CodeChar := '.-';
  71.         'B' : CodeChar := '-...';
  72.         'C' : CodeChar := '-.-.';
  73.         'D' : CodeChar := '-..';
  74.         'E' : CodeChar := '.';
  75.         'F' : CodeChar := '..-.';
  76.         'G' : CodeChar := '--.';
  77.         'H' : CodeChar := '....';
  78.         'I' : CodeChar := '--';
  79.         'J' : CodeChar := '.---';
  80.         'K' : CodeChar := '-.-';
  81.         'L' : CodeChar := '.-..';
  82.         'M' : CodeChar := '--';
  83.         'N' : CodeChar := '-.';
  84.         'O' : CodeChar := '---';
  85.         'P' : CodeChar := '.--.';
  86.         'Q' : CODECHAR := '--.-';
  87.         'R' : CODECHAR := '.-.';
  88.         'S' : CODECHAR := '...';
  89.         'T' : CODECHAR := '-';
  90.         'U' : CODECHAR := '..-';
  91.         'V' : CODECHAR := '...-';
  92.         'W' : CODECHAR := '.--';
  93.         'X' : CODECHAR := '-..-';
  94.         'Y' : CODECHAR := '.--.';
  95.         'Z' : CODECHAR := '--..';
  96.         '1' : CODECHAR := '.----';
  97.         '2' : CODECHAR := '..---';
  98.         '3' : CODECHAR := '...--';
  99.         '4' : CODECHAR := '....-';
  100.         '5' : CODECHAR := '.....';
  101.         '6' : CODECHAR := '-....';
  102.         '7' : CODECHAR := '--...';
  103.         '8' : CODECHAR := '---..';
  104.         '9' : CODECHAR := '----.';
  105.         '0' : CODECHAR := '-----';
  106.         '?' : CODECHAR := '..--..';
  107.         '.' : CODECHAR := '.-.-.-';
  108.         ',' : CODECHAR := '--..--';
  109.         '/' : CODECHAR := '-..-.';
  110.         '$' : CODECHAR := '...-..-';
  111.         '-' : CODECHAR := '-....-';
  112.         ELSE CODECHAR := ''
  113.       END; {CASE}
  114.       Morse(CodeChar);
  115.       IF NOT BlendNextTwo THEN Delay(Ditlength * 2);
  116.       BlendNextTwo := False
  117.     END;
  118.  END;
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.